/*
 * @Description: 
 * @Author: BaldHead
 * @Date: 2022-04-02 19:34:12
 * @LastEditTime: 2022-04-03 18:09:29
 * @LastEditors: Please set LastEditors
 */
// each
let arr = [10, 20, 30, 'AA', 40];
// arr = arr.each(function(item, index) {
//         //this:obj（第2个参数不传,this是window即可）
//         //如果Iem不是有效数字
//         if (isNaN(item)) {
//             return false;
//             //如果return 的是false，则结束当前数组的循环
//         }
//         return item * 10 //+>返回结果是啥 ，把数组当前项替成啥
//     }, obj)
//结果  arr=[100,200,300,'AA',40]

(function() {
    function each(fn, arr) {
        for (let i = 0; i < arr.length; i++) {
            if (isNaN(arr[i])) {
                arr[i] = false;
                break;
            } else {
                // arr[i] = fn.call(arr, arr[i], i);
                arr[i] = fn(arr[i], i);
            }

        }
        return arr;
    }
    Array.prototype.each = each;
})()
// (function() {
//     function each(fn, obj) {
//         // this.bind(obj);
//         for (let i = 0; i < obj.length; i++) {
//             obj[i] = isNaN(Number(obj[i])) ? false : fn(obj[i])
//         }
//         return obj;
//     }

//     Array.prototype.each = each;
// })()
// arr.each(function(item, index) { return item * 10 }, arr)
arr.each((item, index) => { return item * 10 }, arr)
console.log(arr);
//2.replace 实现这个方法，实现和内置一模一样的效果，只需要考虑replace(reg,callBack)这种传参格式的处理  
let str = "baldhead2019baldhead2029"
str = str.replace(/baldhead/g, function(content, $1, $2) {
    //=>arg存储了 每一次大正则匹配的信息和小分组匹配的信息
    return '@' //=>返回的是啥 把当前正则匹配的内容替换成啥
})
str = str.replace(/baldhead/g, function(...arg) {
    //=>arg存储了 每一次大正则匹配的信息和小分组匹配的信息
    return '@' //=>返回的是啥 把当前正则匹配的内容替换成啥
})
let str = "11baldhead2019baldhead2029",
    obj = {};
(function() {
    function myreplace(reg, fn, obj) {
        let _this = this;
        let result = _this.split(reg);
        if (result) {
            _this = result.join(fn.apply(obj, result))
        }
        console.log(_this);
        return _this;
    }
    String.prototype.myreplace = myreplace;
})()

str.myreplace(/bald/g, function(...arg) {
    return '@';
})
console.log(str);
let str = "baldhead2019baldhead2029";
str.replace(/baldhead/g, function(...arg) {
    return '@';
})
console.log(str);
//this:obj（第2个参数不传,this是window即可）

let arr = [10, 20, 30, 'AA', 40],
    obj = {};



let arr1 = [10, 20, 30, 'AA', 40],
    obj = {};
(function() {
    function each(fn, obj) {
        let _this = this;
        //this:obj（第2个参数不传,this是window即可）
        for (let i = 0; i < _this.length; i++) {
            if (isNaN(_this[i])) {
                _this[i] = false;
                break;
            } else {
                // arr[i] = fn.call(arr, arr[i], i);
                this[i] = fn(this[i], i);
            }

        }
        console.log(_this);
        return _this;
    }
    Array.prototype.each = each;
})()
arr1.each((item, index) => {
    return item * 10
}, obj)
console.log(arr1);


let arr = [10, 20, 30, 'AA', 40],
    obj = {};
(function() {
    function each(fn, obj) {
        let _this = this;
        for (let i = 0; i < _this.length; i++) {
            if (isNaN(_this[i])) {
                _this[i] = false;
                break;
            } else {
                this[i] = fn.call(obj, _this[i], i);
            }

        }
        return _this;
    }
    Array.prototype.each = each;
})()
arr.each(function(item, index) {
    return item * 10
}, obj)
console.log(arr);